<?php


namespace app\back\model;

use app\common\Image;
use think\facade\Db;
use think\response\Json;
use \Exception;

class BannerModel
{
    private static $_table = 'banner'; // 轮播图表

    /**添加轮播图
     * @param $input
     * @param $info
     * @return Json
     */
    public static function add($input, $info)
    {
        try {
            $pic = Image::uploadSingle($input['pic'], 'banner');
            if (!is_string($pic)) return $pic;
            $pic = $input['prefixUrl'] . '/api/uploads/' . str_replace('\\', '/', $pic);
            $time = time();
            $rtn = Db::execute("insert into banner (`pic`, `admin_id`, `create_time`,`sort`, `path`) select '{$pic}',{$info['id']},$time,{$input['sort']},'{$input['path']}' from DUAL where (select count(*) from banner where admin_id = {$info['id']} and `status` in (1,2) ) < 6");
            if ($rtn === 1) return jsonSuccess('添加成功');
            return jsonFail('添加失败');
        } catch (Exception $e) {
            return jsonFail('服务内部错误~');
        }
    }

    /**获取轮播列表
     * @param $info
     * @return Json
     */
    public static function lst($info)
    {
        try {
            // 搜索到的顶级轮播
            $map[] = ['admin_id', '=', $info['id']];
            $map[] = ['status', 'in', [1,2]];
            $rtn = Db::table(self::$_table)->where($map)->field('id,pic,sort,create_time,status,path')->order('sort', 'asc')->select()->toArray();
            return jsonSuccess('获取成功', $rtn);
        } catch (Exception $e) {
            return jsonFail('服务内部错误~');
        }
    }

    /**修改状态
     * @param $input
     * @param $info
     * @return Json
     */
    public static function changeStatus($input,$info)
    {
        try {
            // 获取当前信息
            $bannerInfo = Db::table(self::$_table)->field('admin_id,status')->where('id', $input['id'])->find();
            if (!$bannerInfo) return jsonFail('未找到轮播图信息');
            if ($bannerInfo['admin_id'] != $info['id']) return jsonFail('该轮播图非您直接管理，您没有权限操作');
            if ($bannerInfo['status'] == 3) return jsonFail('该轮播图已删除无法继续操作');
            // 根据不同status执行不同操作
            $map = [
                ['id', '=', $input['id']],
                ['admin_id', '=', $info['id']],
                ['status', '=', $input['status'] == 1 ? 2 : 1]
            ];
            $rtn = Db::table(self::$_table)->where($map)->update(['status' => $input['status']]);
            if ($rtn) return jsonSuccess('修改成功');
            return  jsonFail('数据没有更新，修改失败');
        } catch (Exception $e) {
            return jsonFail('服务内部错误~');
        }
    }

    /**删除轮播图
     * @param $input
     * @param $info
     * @return Json
     */
    public static function delete($input,$info)
    {
        try {
            // 获取当前信息
            $bannerInfo = Db::table(self::$_table)->field('admin_id,status')->where('id', $input['id'])->find();
            if (!$bannerInfo) return jsonFail('未找到轮播图信息');
            if ($bannerInfo['admin_id'] != $info['id']) return jsonFail('该轮播图非您直接管理，您没有权限操作');
            if ($bannerInfo['status'] == 3) return jsonFail('该轮播图已删除无法继续操作');
            $map = [
                ['id', '=', $input['id']],
                ['admin_id', '=', $info['id']],
                ['status', '<>', 3]
            ];
            $rtn = Db::table(self::$_table)->where($map)->update(['status' => 3]);
            if ($rtn) return jsonSuccess('删除成功');
            return  jsonFail('数据没有更新，删除失败');
        } catch (Exception $e) {
            return jsonFail('服务内部错误~');
        }
    }

    /**获取单个信息
     * @param $input
     * @param $info
     * @return Json
     */
    public static function getOnly($input,$info)
    {
        try {
            // 获取当前信息
            $bannerInfo = Db::table(self::$_table)->field('admin_id,status,id,pic,path,sort')->where('id', $input['id'])->find();
            if (!$bannerInfo) return jsonFail('未找到轮播图信息');
            if ($bannerInfo['admin_id'] != $info['id']) return jsonFail('该轮播图非您直接管理，您没有权限操作');
            if ($bannerInfo['status'] == 3) return jsonFail('该轮播图已删除无法继续操作');
            unset($bannerInfo['admin_id']);
            unset($bannerInfo['status']);
            return jsonSuccess('获取成功', $bannerInfo);
        } catch (Exception $e) {
            return jsonFail('服务内部错误~');
        }
    }

    /**编辑轮播信息
     * @param $input
     * @param $info
     * @return Json
     */
    public static function edit($input,$info)
    {
        try {
            // 获取当前信息
            $bannerInfo = Db::table(self::$_table)->field('admin_id,status,pic')->where('id', $input['id'])->find();
            if (!$bannerInfo) return jsonFail('未找到轮播信息');
            if ($bannerInfo['admin_id'] != $info['id']) return jsonFail('该轮播非您直接管理，您没有权限操作');
            if ($bannerInfo['status'] == 3) return jsonFail('该轮播已删除无法继续操作');
            if ($input['pic'] == null) {
                unset($input['pic']);
            } else {
                $pic = Image::uploadSingle($input['pic'],'banner');
                if (!is_string($pic)) return $pic;
                $input['pic'] = $input['prefixUrl'] . '/api/uploads/' . str_replace('\\', '/', $pic);
            }
            unset($input['prefixUrl']);
            $rtn = Db::table(self::$_table)->where('id', $input['id'])->update($input);
            if ($rtn) {
                if (isset($input['pic'])) {
                    $filePath = explode('/', $bannerInfo['pic']);
                    unset($filePath[0]);
                    unset($filePath[1]);
                    unset($filePath[2]);
                    unset($filePath[3]);
                    Image::delete(app()->getRootPath() . '/' . implode('/', $filePath));
                }
                return jsonSuccess('编辑成功');
            }
            return jsonFail('数据无变化，编辑失败');
        } catch (Exception $e) {
            return jsonFail('服务内部错误~');
        }
    }
}